iT邦幫忙

2022 iThome 鐵人賽

DAY 8
0

經歷了將近一周的時間,我們介紹了專案的起源、利用解說 DevOps 譜出大架構,再用敏捷開發實踐、以 User Story 製作出 Wireframe 與 Prototype,到昨天完成了易用性測試與回饋的蒐集。今天,讓我們一起進入 Spring Boot 的世界。

Sprint Retrospective

在開始前,我們先結束第一期的 Sprint,一起審視這一周的成果,並制定 Backlogs,同時規劃第二期 Sprint 的目標。昨天我們利用 Powerpoint (有一點羞恥) 快速的製作 Prototype 並進行成果展示與 Usability Test,這個 Prototype 與測試的回饋便是為這一期 Sprint 重要的 Increments。

卡卡的
(昨天測試的情況,From William 的 Iphone SE)

Review

第一期的 Sprint 目標為釐清需求、繪製 Wireframe 和製作 Prototype 作為可交付的 increment

在這期的 Sptint 幾本上都有達到 Sprint Planning 時的目標,也收到了測試的回饋,不過也有幾個點是可以加強,甚至是需要拿出來檢討、並且改善的:

  • Prototype 應考慮使用更適合的工具,時間規劃上需要提早準備 (真是嚴厲)
  • Prototype 僅完成用戶參考與測試的目的,在後面 Angular 開發時只能大概參考,應該讓 Prototype 成為能夠開發的依據、規格,如標示 div 大小,css 顏色的 hex 等
  • Prototype 未實現獲取色碼的方法 (應該要主動顯示出來或是在互動下顯示)

BackLogs & Sprint-2 !!

在初期的的操作上,每位參與測試者都能成功完成照片的選取,其實也是因為流程簡單用戶沒有什麼選擇。第二期的 Sprint,我們需要完成後端程式的撰寫,目標與驗收水準如下:

  1. 製作可接收照片,並回傳一組色碼的 API (Spring Boot 專案)
  2. 以 Postman 工具測試 Response
  3. 撰寫文章介紹專案架構

Spring Boot 介紹

我依舊能記得與 Sprint Boot 的第一次相遇時的那一天,看著那個建一支 Class 後在瀏覽器上輸入 localhost:8080/hi 就能印出 Hello World 的框架,我內心只有一個疑問,啊 Tomcat 哪去了 ?

而 Spring 的官方網站對做了最貼切的解釋:

Spring Boot makes it easy to create stand-alone, production-grade Spring based Applications that you can "just run"

簡言之,Spring Boot 繼承了 Spring 框架原有的特性,並簡化 Spring 的 XML 配置,提高 PG 的開發效率,基本上已經成為目前 Java 開發人員必學的框架。某方面也讓 PG 變得不求甚解。

通常我們在服務建議書裡是這樣寫的:
Spring Boot 具備以下特性:

  • 可獨立創建 Spring 應用程式,並可基於 Maven 或 Gradle 等工具創建可執行的 JARs 與 WARs
  • 內嵌 Tomcat、Jetty、Undertow (即無須部署 WAR 包)
  • 提供自主的 starter 依賴 (POM) 用於簡化配置
  • 隨時自動地配置 Spring 以及相關的第三方 Libraries
  • 提供隨時就緒的功能如: 量度指標(metrics)、健康檢查(health checks)與外部配置
  • 不會生成代碼,且無須前置的 XML 配置

ColorCodeTag 的專案架構

關於 Spring Boot 的介紹 (抄書) 就到上面為止,另外相信對 DevOps 有興趣的工程師應該都具備撰寫 API 的能力,所以這一期的鐵人賽就不帶大家從安裝 JDK 和 Spring Boot Hello World 做起,我們直接從專案的目錄結構開始介紹。

目前主流的 Java 專案的結構會使用 Controller、Service、Repository 的三層式架構,目的是藉由劃分職責,並逐層將依賴注入 (Dependency Injection, DI),來降低各層之間的耦合性。其三層分別為:

Controller (控制層): 負責接收 REST 的請求,同時呼叫 Service 的方法處理業務邏輯,RESTful API 的 endpoint 將被定在此層。

Service (服務層): 負責實踐業務邏輯,如資料運算、整理,並能呼叫 Repository 的方法從資料庫中獲取資料。在在開發上,此層資料夾中會建立 interface 定義業務功能,並交由一支 class 實作介面;另外,在此層也常會建立多個 dto (Data Transfer Objec) 用於包裝 po (Persistent Object) 與傳遞資料。

Repository (資料訪問層): 負責與資料庫溝通,實踐 CRUD,會依照 ORM 框架而有不同的實作方式。在此層會建立 dao (Data Access Object) 與 po (或叫 Entity、Bean)

在開發大型的專案中,甚至會使用 Multi-Module Project 的形式分割專案,先建立一個 Spring Boot 進入點以及多個 Maven projects,在 POM 檔內由上層模組去引用下層模組,並在打包構建時建立 Builders 將模組聚合,詳細的資訊可以參考 Will 保哥的 如何使用 Apache Maven 管裡多個模組的專案 (Multi-Module Project) 文章。

另外會依照專案的需求與習慣建立其他不同的包,如放置共用功能的 utils 等。

今日結語

今天,我們審視了第一次 Sprint 的 increments、檢討不足的地方,並開啟了第二輪的 Sprint,接著又介紹了 Spring Boot 與主流的 Controller、Service、Repository 三層式架構。

明天,我們將逐步建構出 ColorCodeTag 的三層架構,並實踐照片轉色碼的功能,並祝大家周末愉快 ! (然後我終於能有時間去看電馭叛客:邊緣行者了...)


上一篇
Day7: 易用性測試 (Usability Testing)
下一篇
Day9: ColorCodeTag Java 後端建置 (上)
系列文
一個人也能 DevOps ? 用 Angular + Spring Boot 演示專案由開發到部署30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言